﻿
using Outils.Nombres;

#if !NUNIT
using Microsoft.VisualStudio.TestTools.UnitTesting;
#else
using NUnit.Framework;
using TestClass = NUnit.Framework.TestFixtureAttribute;
using TestMethod = NUnit.Framework.TestAttribute;
using TestInitialize = NUnit.Framework.SetUpAttribute;
using TestCleanup = NUnit.Framework.TearDownAttribute;
using ClassInitialize = NUnit.Framework.TestFixtureSetUpAttribute;
using ClassCleanup = NUnit.Framework.TestFixtureTearDownAttribute;
using TestContext = NUnit.Framework.Text;
#endif

namespace OutilsTests
{


    /// <summary>
    ///Classe de test pour NombreTest, destinée à contenir tous
    ///les tests unitaires NombreTest
    ///</summary>
    [TestClass()]
    public class NombreTest
    {


        private TestContext testContextInstance;

        /// <summary>
        ///Obtient ou définit le contexte de test qui fournit
        ///des informations sur la série de tests active ainsi que ses fonctionnalités.
        ///</summary>
        public TestContext TestContext
        {
            get
            {
                return testContextInstance;
            }
            set
            {
                testContextInstance = value;
            }
        }

        #region Attributs de tests supplémentaires
        // 
        //Vous pouvez utiliser les attributs supplémentaires suivants lors de l'écriture de vos tests :
        //
        //Utilisez ClassInitialize pour exécuter du code avant d'exécuter le premier test dans la classe
        //[ClassInitialize()]
        //public static void MyClassInitialize(TestContext testContext)
        //{
        //}
        //
        //Utilisez ClassCleanup pour exécuter du code après que tous les tests ont été exécutés dans une classe
        //[ClassCleanup()]
        //public static void MyClassCleanup()
        //{
        //}
        //
        //Utilisez TestInitialize pour exécuter du code avant d'exécuter chaque test
        //[TestInitialize()]
        //public void MyTestInitialize()
        //{
        //}
        //
        //Utilisez TestCleanup pour exécuter du code après que chaque test a été exécuté
        //[TestCleanup()]
        //public void MyTestCleanup()
        //{
        //}
        //
        #endregion


        /// <summary>
        ///Test pour RomainVersEntier
        ///</summary>
        [TestMethod()]
        public void RomainVersEntierTest()
        {
            string valeur = "XIV";
            int expected = 14;
            int actual;
            actual = Nombre.RomainVersEntier( valeur );
            Assert.AreEqual( expected, actual, "RomainVersEntier" );

        }

        /// <summary>
        ///Test pour RetourneArrondiMoitie
        ///</summary>
        [TestMethod()]
        public void RetourneArrondiMoitieTest()
        {
            double nombre = 12.6;
            double expected = 13;
            double actual;
            actual = Nombre.RetourneArrondiMoitie( nombre );
            Assert.AreEqual( expected, actual, "RetourneArrondiMoitie" );
        }

        /// <summary>
        ///Test pour HexadecimalVersEntier
        ///</summary>
        [TestMethod()]
        public void HexadecimalVersEntierTest()
        {
            string valeur = "10";
            int expected = 16;
            int actual;
            actual = Nombre.HexadecimalVersEntier( valeur );
            Assert.AreEqual( expected, actual, "HexadecimalVersEntier" );
        }

        /// <summary>
        ///Test pour DecimalVersHexadecimal
        ///</summary>
        [TestMethod()]
        public void DecimalVersHexadecimalTest()
        {
            int decValue = 16;
            string expected = "10";
            string actual;
            actual = Nombre.DecimalVersHexadecimal( decValue );
            Assert.AreEqual( expected, actual, "DecimalVersHexadecimal" );
        }

        /// <summary>
        ///Test pour ConversionEuro
        ///</summary>
        [TestMethod()]
        public void ConversionEuroTest()
        {
            // cas ne rien faire
            decimal montant = 1;
            byte type = 0;
            decimal expected = 1;
            decimal actual;
            actual = Nombre.ConversionEuro( montant, type );
            Assert.AreEqual( expected, actual, "ConversionEuro - type=0" );

            //1 : mettre en euro
            montant = 6.55957m;
            type = 1;
            expected = 1;
            actual = Nombre.ConversionEuro( montant, type );
            Assert.AreEqual( expected, actual, "ConversionEuro - type=1" );

            //  2 : mettre en francs
            montant = 1;
            type = 2;
            expected = 6.55957m;
            actual = Nombre.ConversionEuro( montant, type );
            Assert.AreEqual( expected, actual, "ConversionEuro - type=2" );
        }
    }
}
